package com.zues.thread.lock.variable_class;

import com.zues.thread.util.ThreadUtil;
import lombok.extern.slf4j.Slf4j;

/**
 * 假设有一个线程观察共享的温度值，温度一变高就会报警，使用volatile实现
 * 演示volatile实现线程之间的共享变量可见性
 * @ClassName Demo2
 * @Description TODO
 * @Author zeus
 * @Date 3/19/2025 10:31 上午
 * @Version 1.0
 **/
@Slf4j(topic = "c.Demo2")
public class Demo2 {
    // 使用 volatile 关键字确保温度值的可见性
    private static volatile int temperature = 25;
    private static final int ALERT_TEMPERATURE = 30;

    public static void main(String[] args) {
        // 创建并启动温度观察线程
        Thread observerThread = new Thread(() -> {
            while (true) {
                if (temperature > ALERT_TEMPERATURE) {
                    log.info("温度过高，触发报警！当前温度: {}", temperature);
                }
                // 线程休眠一段时间，避免过于频繁的检查
                ThreadUtil.sleep(1);
            }
        });
        observerThread.start();

        // 创建并启动温度变化线程
        Thread changeThread = new Thread(() -> {
            for (int i = 0; i < 10; i++) {
                temperature++;
                log.info("温度已更新为: {}", temperature);
                // 线程休眠一段时间，模拟温度变化
                ThreadUtil.sleep(2);
            }
        });
        changeThread.start();
    }

}

